// spoj7001 VLATTICE
// 题意：给定一个n*n*n(n<=1000000)的立方体格点，从(0, 0, 0)到(n, n, n)。
//       问从(0, 0, 0)能看到多少格点满足从(0, 0, 0)到该格点的线段没有
//       其他格点。
//
// 题解：翻译一下其实就是为gcd(a, b, c)=1(0<=a, b, c<=n)的三元组个数。
//       可以容斥或者莫比乌斯。有类似的题目。这里不推导了。
//       分块可以加速求。然后这里a, b, c可以取零，取零的时候单独考虑。
//
// run: $exec < input
#include <iostream>

int const maxn = 1000007;
bool not_prime[maxn];
int mo[maxn];
long long sum[maxn];
int prime[maxn];
int tot;

void init_mobius(int n = maxn)
{
	mo[1] = 1;
	for (int i = 2; i < n; i++) {
		if (!not_prime[i]) mo[i] = -1, prime[++tot] = i;
		for (int j = 1; prime[j] * i < n; j++) {
			not_prime[prime[j] * i] = true;
			if (i % prime[j] == 0) {
				mo[prime[j] * i] = 0;
				break;
			}
			mo[prime[j] * i] = -mo[i];
		}
	}
	sum[1] = mo[1];
	for (int i = 2; i < n; i++) sum[i] = sum[i - 1] + mo[i];
}

long long inverse(long long n)
{
	long long ans = 0;
	for (int i = 1, pos = 1; i <= n; i = pos + 1) {
		pos = n / (n/i);
		ans += (sum[pos] - sum[i - 1]) * (n/i) * (n/i) * ((n/i) + 3);
	}
	return ans;
}

int main()
{
	std::ios::sync_with_stdio(false);
	init_mobius();
	int T; std::cin >> T;
	while (T--) {
		int n;
		std::cin >> n;
		std::cout << inverse(n) + 3 << '\n';
	}
}

